package com.android.support.lib.universal.validation;

import com.android.support.lib.universal.util.UtilChronograph;
import com.android.support.lib.universal.util.Utilregex;

import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * 对数据进行一些验证
 *
 * @author Administrator
 */
public class Validation {

    /**
     * 错误信息
     *
     * @param v         0 亲，手机号不能为空！ 1 亲，你输入的号码不合理 2 亲，密码不能为空! 3 两次输入密码不统一 4
     *                  亲，密码长度不能少于6位数 5 亲，请先输入验证码 6 亲，验证码不正确哦 7 空，什么都没有不填，即正确 8
     *                  验证码已发送，请耐心等待。 9 验证码获取失败,同一手机号一天限制十条 10 亲，服务器连接错误，11
     *                  亲，请再次输入密码，12 亲，请先获取验证码 13 亲，验证码获取失败
     * @param txt_error 显示控件,显示错误信息
     */
    public static void show(int v, TextView txt_error) {
        if (txt_error != null) {
            if (txt_error.getVisibility() == View.GONE) {
                txt_error.setVisibility(View.VISIBLE);
            }
            switch (v) {
                case 0:
                    txt_error.setText("亲，手机号不能为空！");
                    break;
                case 1:
                    txt_error.setText("亲，你输入的号码不合理");
                    break;
                case 2:
                    txt_error.setText("亲，密码不能为空!");
                    break;
                case 11:
                    txt_error.setText("亲，请再次输入密码");
                    break;
                case 3:
                    txt_error.setText("两次输入密码不统一");
                    break;
                case 4:
                    txt_error.setText("亲，密码长度不能少于6位数");
                    break;
                case 12:
                    txt_error.setText("亲，请先获取验证码");
                    break;
                case 5:
                    txt_error.setText("亲，请先输入验证码");
                    break;
                case 6:
                    txt_error.setText("亲，验证码不正确哦");
                    break;
                case 7:
                    txt_error.setText("");
                    break;
                case 8:
                    txt_error.setText("验证码已发送，请耐心等待。");
                    break;
                case 9:
                    txt_error.setText("同一手机号验证码一天限制十条");
                    break;
                case 13:
                    txt_error.setText("亲，验证码获取失败");
                    break;
                case 10:
                    txt_error.setText("亲，服务器连接失败");
                    break;
                case 16:
                    txt_error.setText("亲，密码长度不能大于16位数");
                    break;
            }
        }
    }

    /**
     * 登录
     *
     * @param edit_phone    手机号
     * @param edit_password 密码
     * @param txt_error     错误文本
     * @return
     */
    public static Boolean Log(EditText edit_phone, EditText edit_password,
                              TextView txt_error) {
        String phone;
        if (edit_phone.getText() != null
                && edit_phone.getText().toString().trim().length() > 0) {
            phone = edit_phone.getText().toString().trim();
        } else {
            show(0, txt_error);
            return false;
        }
        if (!Utilregex.BMobileNO(phone)) {
            show(1, txt_error);
            return false;
        }

        String pass;
        if (edit_password.getText() != null
                && edit_password.getText().toString().trim().length() > 0) {
            pass = edit_password.getText().toString().trim();
        } else {
            show(2, txt_error);
            return false;
        }
        if (pass.length() < 6) {
            show(4, txt_error);
            return false;
        }
        show(7, txt_error);
        return true;
    }

    /**
     * 验证码按钮计时
     */
    public static void calculateBtnCode(Button btn_codes, TextView txt_error) {
        if (btn_codes != null) {
            show(8, txt_error);
            btn_codes.setText("(59s)重新获取");
            btn_codes.setClickable(false);
            btn_code = btn_codes;
            if (chronographDown == null) {
                chronographDown = new UtilChronograph();
            }
            chronographDown.timing(handler, "", "", 0, 60, false, false);
        }
    }

    /**
     * 验证手机号，并重新计时获取验证码的时间
     *
     * @param btn_codes  获取验证码按钮
     * @param edit_phone 手机号编辑文本框
     * @param txt_error  错误文本
     * @return 正确手机号，错误返回 null
     */
    public static String BMobel(Button btn_codes, EditText edit_phone,
                                TextView txt_error) {
        String phone;
        if (edit_phone != null
                && edit_phone.getText().toString().trim().length() > 0) {
            phone = edit_phone.getText().toString().trim();
        } else {
            show(0, txt_error);
            return null;
        }
        if (!Utilregex.BMobileNO(phone)) {
            show(1, txt_error);
            return null;
        }
        if (btn_codes != null) {
            show(8, txt_error);
            btn_codes.setText("(59s)重新获取");
            btn_codes.setClickable(false);
            btn_code = btn_codes;
            if (chronographDown == null) {
                chronographDown = new UtilChronograph();
            }
            chronographDown.timing(handler, "", "", 0, 60, false, false);
        }
        return phone;
    }

    /**
     * 倒计时类
     */
    private static UtilChronograph chronographDown;
    private static Button btn_code;
    /**
     * 验证码，界面更新
     */
    private static Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            /**
             * 获取计时时间
             */
            btn_code.setText("(" + chronographDown.getCn_timing() + "s)" + "重新获取");
            if (chronographDown.getCn_timing().equals("00")) {
                chronographDown.timing(handler, "", "", 0, 60, false, false);

                btn_code.setText("获取验证码");
                btn_code.setClickable(true);
                // 取消线程
                handler.removeMessages(0);
            }
        }

    };

    /**
     * 验证码验证
     *
     * @param edt_code  验证码 编辑框
     * @param realCode  真实验证码
     * @param txt_error 错误文本框
     * @return
     */
    public static Boolean Code(EditText edt_code, String realCode, TextView txt_error) {
        String code;

        if (edt_code.getText() != null
                && edt_code.getText().toString().trim().length() > 0) {
            code = edt_code.getText().toString().trim();
        } else {
            show(5, txt_error);
            return false;
        }
        if (!code.equals(realCode)) {
            show(6, txt_error);
            return false;
        }
        show(7, txt_error);
        return true;
    }

    /**
     * 注册
     *
     * @param edit_phone    手机号码 编辑框
     * @param edit_password 密码 编辑框
     * @param edt_confirm   确认密码 编辑框
     * @param txt_error     错误文本框
     * @return
     */
    public static Boolean Reg(EditText edit_phone, EditText edit_password,
                              EditText edt_confirm, TextView txt_error) {
        //手机号
        String phone;
        if (edit_phone.getText() != null
                && edit_phone.getText().toString().trim().length() > 0) {
            phone = edit_phone.getText().toString().trim();
        } else {
            show(0, txt_error);
            return false;
        }
        if (!Utilregex.BMobileNO(phone)) {
            show(1, txt_error);
            return false;
        }
        // 密码
        String pass = edit_password.getText().toString().trim();
        if (pass.length() < 6) {
            show(4, txt_error);
            return false;
        }
        if (pass.length() > 16) {
            show(16, txt_error);
            return false;
        }
        // 确认密码
        if (edt_confirm != null) {
            String confirm;
            if (edt_confirm.getText() != null
                    && edt_confirm.getText().toString().trim().length() > 0) {
                confirm = edt_confirm.getText().toString().trim();
            } else {
                show(11, txt_error);
                return false;
            }
            if (!pass.equals(confirm)) {
                show(3, txt_error);
                return false;
            }
        }
        show(7, txt_error);
        return true;
    }

    /**
     * 验证密码
     *
     * @param edit_password 密码框 不可为空
     * @param edt_confirm   确认(再次输入)密码框 可为空
     * @param txt_error     错误文本 可为空
     * @return
     */
    public static Boolean password(EditText edit_password, EditText edt_confirm,
                                   TextView txt_error) {
        if (edit_password.getText() != null
                && edit_password.getText().toString().trim().length() > 0) {
            if (edit_password.getText().toString().trim().length() >= 6) {
                // 密码
                String pass = edit_password.getText().toString().trim();
                if (pass.length() > 16) {
                    show(16, txt_error);
                    return false;
                }
                // 确认密码
                String confirm;
                if (edt_confirm != null && edt_confirm.getText() != null
                        && edt_confirm.getText().toString().trim().length() > 0) {
                    confirm = edt_confirm.getText().toString().trim();
                    if (!pass.equals(confirm)) {
                        show(3, txt_error);
                        return false;
                    }
                }
            } else {
                show(4, txt_error);
                return false;
            }
        } else {
            show(2, txt_error);
            return false;
        }
        return true;
    }
}
